package visual;

import interfaces.IAtualizarJTable;
import java.awt.Font;
import java.awt.Point;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.Color;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JTextField;
import javax.swing.JButton;

import servidor.Collector;
import util.Albun;
import visual.cadastro.frmCadastrarEditarAlbun;
import visual.cliente.frmCliente;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;
import java.awt.Toolkit;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import basedados.arquivos_texto.TxtIObj;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import javax.swing.ImageIcon;

public class frmColecionador extends JFrame implements IAtualizarJTable {
	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private JTextField txtPorta;
	private JButton btnIniciar;
	private JLabel lblNome;
	private JComboBox cboColecionadores;
	private JTable JTableMinhaColecao;
	private JButton btnCadastrar;
	private frmCadastrarEditarAlbun _frmCadEdAlbun;
	private JButton btnEditar;
	private JButton btnExcluir;
	private frmCliente _frmCliente;
	private short _identificadorColecionador;
	
	public void setIdentificadorColecionador(short identificadorColecionador) { this._identificadorColecionador = identificadorColecionador; }
	public short getIdentificadorColecionador() { return _identificadorColecionador; }

	public frmColecionador(short tipoColecionador) {
		setIdentificadorColecionador(tipoColecionador);
		iniciaForm();
	}
	
	public frmColecionador() {
		setIdentificadorColecionador((short)1);
		iniciaForm();
	}
	
	private void iniciaForm(){
		setIconImage(Toolkit.getDefaultToolkit().getImage(frmColecionador.class.getResource("/imgs/som.png")));
		setFont(new Font("Tahoma", Font.PLAIN, 11));
		setResizable(false);
		//setIconImage(Toolkit.getDefaultToolkit().getImage(frmColecionador.class.getResource("/imgs/JPEG File002.png")));
		setTitle("Colecionador " + getIdentificadorColecionador());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocation(new Point(200, 200));
		setBounds(100, 100, 482, 361);
		contentPane = new JPanel();
		contentPane.setFont(new Font("Tahoma", Font.PLAIN, 11));
		contentPane.setToolTipText("Colecionador");
		contentPane.setBackground(Color.WHITE);
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JPanel panel = new JPanel();
		panel.setBorder(new TitledBorder(null, "Colecionador", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panel.setBackground(Color.WHITE);
		panel.setBounds(10, 11, 366, 75);
		panel.setFont(new Font("Tahoma", Font.PLAIN, 11));
		contentPane.add(panel);
		panel.setLayout(null);
		
		JLabel lblPorta = new JLabel("Porta:");
		lblPorta.setBounds(10, 23, 92, 19);
		panel.add(lblPorta);
		lblPorta.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lblPorta.setBackground(new Color(27, 142, 170));
		lblPorta.setForeground(Color.WHITE);
		lblPorta.setOpaque(true);
		
		txtPorta = new JTextField();
		txtPorta.setBounds(107, 23, 150, 20);
		panel.add(txtPorta);
		txtPorta.setText("808" + getIdentificadorColecionador());
		txtPorta.setColumns(10);
		
		lblNome = new JLabel("Nome:");
		lblNome.setBounds(10, 48, 92, 19);
		panel.add(lblNome);
		lblNome.setOpaque(true);
		lblNome.setForeground(Color.WHITE);
		lblNome.setFont(new Font("Tahoma", Font.PLAIN, 11));
		lblNome.setBackground(new Color(27, 142, 170));
		
		cboColecionadores = new JComboBox();
		cboColecionadores.setFont(new Font("Tahoma", Font.PLAIN, 11));
		cboColecionadores.setBounds(107, 47, 150, 20);
		panel.add(cboColecionadores);
		cboColecionadores.setModel(new DefaultComboBoxModel(new String[] {"Colecionador1", "Colecionador2"}));
		cboColecionadores.setSelectedIndex(getIdentificadorColecionador()-1);
		
		btnIniciar = new JButton("Iniciar");
		btnIniciar.setBounds(267, 21, 89, 46);
		panel.add(btnIniciar);
		btnIniciar.setFont(new Font("Tahoma", Font.PLAIN, 11));
		btnIniciar.setBackground(new Color(27, 142, 170));
		btnIniciar.setForeground(Color.WHITE);
		btnIniciar.setOpaque(true);
		
		JPanel pnlMinhaColecao = new JPanel();
		pnlMinhaColecao.setBorder(new TitledBorder(null, "Minha Cole\u00E7\u00E3o", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		pnlMinhaColecao.setBackground(Color.WHITE);
		pnlMinhaColecao.setBounds(10, 97, 456, 225);
		contentPane.add(pnlMinhaColecao);
		pnlMinhaColecao.setLayout(null);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 22, 436, 162);
		pnlMinhaColecao.add(scrollPane);
		
		JTableMinhaColecao = new JTable(getModel());
		JTableMinhaColecao.addFocusListener(new FocusAdapter() {
			@Override
			public void focusGained(FocusEvent arg0) {
				btnEditar.setEnabled(SelecionouAlguem());
				btnExcluir.setEnabled(SelecionouAlguem());
			}
			@Override
			public void focusLost(FocusEvent arg0) {
				btnEditar.setEnabled(SelecionouAlguem());
				btnExcluir.setEnabled(SelecionouAlguem());
			}
		});
		scrollPane.setViewportView(JTableMinhaColecao);
		
		final IAtualizarJTable isto = this;
		
		btnCadastrar = new JButton("Cadastrar");
		btnCadastrar.setFont(new Font("Tahoma", Font.PLAIN, 11));
		btnCadastrar.setBackground(new Color(27, 142, 170));
		btnCadastrar.setForeground(Color.WHITE);
		btnCadastrar.setOpaque(true);
		btnCadastrar.setBounds(10, 191, 89, 23);
		btnCadastrar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if (_frmCadEdAlbun!=null) {_frmCadEdAlbun.setVisible(false); _frmCadEdAlbun.dispose(); _frmCadEdAlbun = null;}
				_frmCadEdAlbun = new frmCadastrarEditarAlbun(isto, getIdentificadorColecionador(), _frmCliente);
				_frmCadEdAlbun.setVisible(true);
			}
		});
		
		pnlMinhaColecao.add(btnCadastrar);
		
		btnEditar = new JButton("Editar");
		btnEditar.setEnabled(false);
		btnEditar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if (!SelecionouAlguem()) return;
				if (getIdSelecionado().equals("-1")) return;
				
				String id = getIdSelecionado();
				Albun a = (Albun) new TxtIObj(new Albun(getIdentificadorColecionador())).getIObj(Integer.valueOf(id), 200L);
				
				if (_frmCadEdAlbun!=null) {
					_frmCadEdAlbun.setVisible(false); _frmCadEdAlbun.dispose(); _frmCadEdAlbun = null;
				}
				_frmCadEdAlbun = new frmCadastrarEditarAlbun(isto, a, getIdentificadorColecionador(), _frmCliente);
				_frmCadEdAlbun.setVisible(true);
				
			}
		});
		btnEditar.setFont(new Font("Tahoma", Font.PLAIN, 11));
		btnEditar.setBackground(new Color(27, 142, 170));
		btnEditar.setForeground(Color.WHITE);
		btnEditar.setOpaque(true);
		btnEditar.setBounds(106, 191, 89, 23);
		pnlMinhaColecao.add(btnEditar);
		
		btnExcluir = new JButton("Excluir");
		btnExcluir.setEnabled(false);
		btnExcluir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if (!SelecionouAlguem()) return;
				if (getIdSelecionado().equals("-1")) return;
				if (apoio.Mensagens.question("Deseja Excluir ?", "Exclusao")){
					Albun a = new Albun(getIdentificadorColecionador());
					a.setCodigo(Integer.valueOf(getIdSelecionado()));
					
					TxtIObj tx = new TxtIObj(a);
					if (tx.Excluir(200L)) {
						if (_frmCliente!=null) { _frmCliente.preencherMeusItens(); }
						preencher();
						apoio.Mensagens.mensagemInfo("Albun Excluido", "Excluido");
					} else {
						apoio.Mensagens.mensagemErro("Ocorreu um erro na exclusao", "Erro");
					}
					tx = null;
				}
			}
		});
		btnExcluir.setFont(new Font("Tahoma", Font.PLAIN, 11));
		btnExcluir.setBackground(new Color(27, 142, 170));
		btnExcluir.setForeground(Color.WHITE);
		btnExcluir.setOpaque(true);
		btnExcluir.setBounds(202, 191, 89, 23);
		pnlMinhaColecao.add(btnExcluir);
		
		JButton btnCliente = new JButton("Cliente");
		btnCliente.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if (_frmCliente==null) {_frmCliente = new frmCliente(getIdentificadorColecionador(), isto);} else {
					_frmCliente.preencherMeusItens();
				}
				_frmCliente.setVisible(true);
			}
		});
		btnCliente.setFont(new Font("Tahoma", Font.PLAIN, 11));
		btnCliente.setBackground(new Color(27, 142, 170));
		btnCliente.setForeground(Color.WHITE);
		btnCliente.setOpaque(true);
		btnCliente.setBounds(357, 191, 89, 23);
		pnlMinhaColecao.add(btnCliente);
		
		JLabel lblImagemsom = new JLabel("");
		lblImagemsom.setIcon(new ImageIcon(frmColecionador.class.getResource("/imgs/som.png")));
		lblImagemsom.setBounds(386, 11, 80, 95);
		contentPane.add(lblImagemsom);
		
		btnIniciar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				txtPorta.setEnabled(false);
				btnIniciar.setEnabled(false);
				cboColecionadores.setEnabled(false);
				
				int porta = Integer.valueOf(txtPorta.getText());
				String nome = cboColecionadores.getSelectedItem().toString();
				iniciarColecionador(porta, nome);
			}
		});
		preencher();
	}
	
	private DefaultTableModel getModel(){
		return new DefaultTableModel(
				new String[][] {},
				new Albun(getIdentificadorColecionador()).getTitulosJTable()
				) {
			private static final long serialVersionUID = -2030171847248754625L;

			@Override
			public boolean isCellEditable(int row, int column) {
				// return super.isCellEditable(row, column);
				return false;
			}
		};
	}
	
	@Override public void preencher() {
		Albun a = new Albun(getIdentificadorColecionador());
		DefaultTableModel modelo = (DefaultTableModel) JTableMinhaColecao.getModel();
		modelo.setNumRows(0);
		if (modelo.getRowCount() > 0) {
			for(int i = 0; i < modelo.getRowCount(); i++) {  
				modelo.removeRow(i);
	        }  
		}
		// Adiciona uma nova linha
		for(String[] st : a.getDadosJTable()){
			modelo.addRow(st);
		}
	}

	private void iniciarColecionador(int porta, String nome){
		Collector col = new Collector(getIdentificadorColecionador(), this);
		col.setPorta(porta);
		col.setMyName(nome);
		col.iniciar();
	}

	/**
	 * @return true se selecionou alguem
	 * */
	private boolean SelecionouAlguem(){
		return JTableMinhaColecao.getSelectedRow() >= 0;
	}
	
	/**
	 * @return id selecionado
	 * */
	private String getIdSelecionado(){
		if (!SelecionouAlguem()) return "-1";
		DefaultTableModel modelo = (DefaultTableModel)JTableMinhaColecao.getModel();
		return (String)modelo.getValueAt(JTableMinhaColecao.getSelectedRow(), 0);
	}
}
